package cn.uce.cc.common.control;

import cn.uce.base.page.Page;
import cn.uce.base.page.Pagination;
import cn.uce.base.vo.IcsEmpVo;
import cn.uce.base.vo.IcsOrgTreeNodeVo;
import cn.uce.base.vo.IcsOrgVo;
import cn.uce.common.constants.CcConstants;
import cn.uce.common.constants.Constants;
import cn.uce.common.omg.biz.IOmgEmpBiz;
import cn.uce.common.omg.biz.IOmgOrgBiz;
import cn.uce.common.utils.DomainUtil;
import cn.uce.utils.StringUtil;
import cn.uce.web.common.base.BaseController;
import cn.uce.web.common.base.CurrentUser;
import cn.uce.web.common.util.WebUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 优速组织架构相关
 * Created by chenqinglong on 2018/6/5 0005.
 */
@Controller
@RequestMapping("cs/omg/org")
public class OmgOrgController extends BaseController {
	
	private final Logger logger = LoggerFactory.getLogger(OmgOrgController.class);
	
    @Resource
    private IOmgOrgBiz omgOrgBiz;

    @Resource
    private IOmgEmpBiz omgEmpBiz;


    /**
     * 根据乾坤机构 机构基准编号 查询机构信息及所对应的行政机构的员工集合
     * @param baseOrgCode
     * @return
     */
    @RequestMapping(value = "/getOrgInforByCmsBaseOrgCode.do",method= RequestMethod.POST)
    @ResponseBody
    public Map<String, Object>  getOrgInforByCmsBaseOrgCode(String baseOrgCode){
        //查询此组织（乾坤组织）的基本信息
        IcsOrgVo icsOrgVo = omgOrgBiz.getOrgInforByCmsBaseOrgCode(baseOrgCode);

        //查询此组织（乾坤组织）下的人员信息
        List<IcsEmpVo> empVos = omgEmpBiz.getEmpsByCmsBaseOrgCode(baseOrgCode);

        icsOrgVo.setEmpListOfThisCmsOrg(empVos);
        return this.returnSuccess(icsOrgVo);
    }

    /**
     * 组织机构树查询
     * @param orgVo
     * @return
     */
    @RequestMapping({"/findAsyOrgTree"})
    @ResponseBody
    public List<IcsOrgTreeNodeVo> findAsyOrgTree(IcsOrgVo orgVo) {
        return this.omgOrgBiz.findAsyOrgTree(orgVo);
    }


    /**
     * 查询网点列表
     * @param icsOrgVo
     * @return
     */
    @RequestMapping(value = "findOrgCodeWebsite")
    @ResponseBody
    public List<IcsOrgTreeNodeVo> findOrgCodeWebsite(IcsOrgVo icsOrgVo){
        return this.omgOrgBiz.findOrgCodeWebsite(icsOrgVo);
    }

    /**
     * 查询网点列表
     * @param icsOrgVo
     * @return
     */
    @RequestMapping(value = "findOrgCmsByOrgType")
    @ResponseBody
    public List<IcsOrgVo> findOrgCmsByOrgType(IcsOrgVo icsOrgVo){
        return this.omgOrgBiz.findOrgCmsByOrgType(icsOrgVo);
    }

    /**
     * 根据ID查code
     * @param cmsOrgId
     * @return
     */
    @RequestMapping(value = "getCmsOrgInforByCmsOrgId")
    @ResponseBody
    public IcsOrgVo getCmsOrgInforByCmsOrgId(Integer cmsOrgId){
        return this.omgOrgBiz.getCmsOrgInforByCmsOrgId(cmsOrgId);
    }

    /**
     * 根据机构类型查询机构，全部机构状态
     * @param icsOrgVo
     * @return
     */
    @RequestMapping(value = "findOrgCmsByOrgTypeAllStatus")
    @ResponseBody
    public List<IcsOrgVo> findOrgCmsByOrgTypeAllStatus(IcsOrgVo icsOrgVo){
        return this.omgOrgBiz.findOrgCmsByOrgType(icsOrgVo);
    }

    /**
     * 用于组织机构的动态加载
     * 输入框输入值时进行查询
     * 不输入时，直接返回空集合
     * 才查询
     * @param icsOrgVo
     * @param q
     * @return
     */
    @RequestMapping(value = "findOrgCmsByOrgTypeAllStatusDB")
    @ResponseBody
    public List<IcsOrgVo> findOrgCmsByOrgTypeAllStatusDB(IcsOrgVo icsOrgVo, String q, String defaultOrgType){
        if(StringUtil.isNotEmpty(q)){
            //有条件根据条件查询
            icsOrgVo.setOrgNameForQue(q);
            return omgOrgBiz.findOrgCmsByOrgTypeDB(icsOrgVo);
        }else{
            //无条件默认查询
//            根据传入的默认查询机构类型查询默认的机构数据
//            减少下拉框数据的加载量
//            if (StringUtil.isEmpty(defaultOrgType)){
                //如果没有传默认查询机构
                // 默认查询财务中心
//                defaultOrgType = CcConstants.ORG_TYPE_FINANCIAL_CENTERE+"";
//            }
//            icsOrgVo.setOrgTypeStr(defaultOrgType);
//            直接返回空集合
            return new ArrayList<IcsOrgVo>();
        }

    }

    /**
     * 用于组织机构的动态加载
     * 输入框输入值时进行查询
     * 不输入时，直接返回空集合
     * 才查询
     * @param icsOrgVo
     * @param q
     * @return
     */
    @RequestMapping(value = "findOrgCmsByOrgTypeAllStatusPage")
    @ResponseBody
    public Map<String,Object> findOrgCmsByOrgTypeAllStatusPage(IcsOrgVo icsOrgVo, String q, String defaultOrgType, Page page){
        Pagination<IcsOrgVo> pagination = new Pagination<>();
        if(StringUtil.isNotEmpty(q)){
            //有条件根据条件查询
            icsOrgVo.setOrgNameForQue(q);
            pagination = omgOrgBiz.findOrgCmsByOrgTypePage(icsOrgVo, page);
            return this.returnSuccess(pagination);
        }else{
            //无条件默认查询
//            根据传入的默认查询机构类型查询默认的机构数据
//            减少下拉框数据的加载量
//            if (StringUtil.isEmpty(defaultOrgType)){
            //如果没有传默认查询机构
            // 默认查询财务中心
//                defaultOrgType = CcConstants.ORG_TYPE_FINANCIAL_CENTERE+"";
//            }
//            icsOrgVo.setOrgTypeStr(defaultOrgType);
//            直接返回空集合
            return this.returnSuccess(pagination);
        }

    }

    /**
     * 根据乾坤机构 机构基准编号 查询机构信息及所对应的行政机构的员工集合
     * @param baseOrgCode
     * @return
     */
    @RequestMapping(value = "/getOrgInfoAllStatusByCmsBaseOrgCode.do",method= RequestMethod.POST)
    @ResponseBody
    public Map<String, Object>  getOrgInfoAllStatusByCmsBaseOrgCode(String baseOrgCode){
        //查询此组织（乾坤组织）的基本信息
        IcsOrgVo icsOrgVo = omgOrgBiz.getOrgInforByCmsBaseOrgCodeAllStatus(baseOrgCode);

        //查询此组织（乾坤组织）下的人员信息
        List<IcsEmpVo> empVos = omgEmpBiz.getEmpsByCmsBaseOrgCode(baseOrgCode);

        icsOrgVo.setEmpListOfThisCmsOrg(empVos);
        return this.returnSuccess(icsOrgVo);
    }
    
    @RequestMapping(value = "/findCmsBaseOrgByPage", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> findCmsBaseOrgByPage(IcsOrgVo omgCmsOrgVo, Page page) {
	// 转义
	omgCmsOrgVo.setQ(DomainUtil.escapeSpecialChar(omgCmsOrgVo.getQ()));
	Pagination<IcsOrgVo> pagination = omgOrgBiz.findByByCondition(omgCmsOrgVo, page);
	return returnSuccess(pagination);
    }
    
    @RequestMapping(value = "/findAllOrgByPage", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> findAllOrgByPage(IcsOrgVo omgCmsOrgVo, Page page) {
		// 转义
		omgCmsOrgVo.setQ(DomainUtil.escapeSpecialChar(omgCmsOrgVo.getQ()));
		Pagination<IcsOrgVo> pagination = omgOrgBiz.findAllOrgByPage(omgCmsOrgVo, page);
		return returnSuccess(pagination);
    }
    
    @RequestMapping(value = "/findOrgByOrgCode", method = RequestMethod.POST)
    @ResponseBody
    public Map<String, Object> findOrgByOrgCode(IcsOrgVo omgCmsOrgVo, Page page) {
	// 转义
    	omgCmsOrgVo.setQ(DomainUtil.escapeSpecialChar(omgCmsOrgVo.getQ()));
    	int intValue = WebUtil.getCurrentUser().getCmsOrgType().intValue();
    	String cmsBaseOrgCode = WebUtil.getCurrentUser().getCmsBaseOrgCode();
		if (intValue == 20) {
			omgCmsOrgVo.setFinanceCenterCode(cmsBaseOrgCode);
		}
		if (intValue == 21) {
			omgCmsOrgVo.setOperateCenterCode(cmsBaseOrgCode);
		}
		if (intValue == 30) {
			omgCmsOrgVo.setParentOrgCode(cmsBaseOrgCode);
		}
		if (intValue == 40) {
			omgCmsOrgVo.setBaseOrgCode(cmsBaseOrgCode);
		}
    	Pagination<IcsOrgVo> pagination = omgOrgBiz.findByByCondition(omgCmsOrgVo, page);
    	return returnSuccess(pagination);
    }


    /**
     * 查询某个网点同中心的不包含自己的网点或者查询某个中心不包含自己的所有的财务中心
     * @return
     */
    @RequestMapping(value = "getOrgOfNotSelf")
    @ResponseBody
    public List<IcsOrgVo> getOrgOfNotSelf(String taskDefKey){
        CurrentUser currentUser = WebUtil.getCurrentUser();
        if (currentUser != null){
            Map<String,Object> icsOrgVo = new HashMap(CcConstants.HASH_MAP_LENGTH);
            icsOrgVo.put("baseOrgCode",currentUser.getCmsBaseOrgCode());
            if(currentUser.getOrgType() == CcConstants.ORG_TYPE_HEAD_QUARTERS){
                //如果机构类型是总部，根据当前任务节点判断查询的机构,如果当前节点是责任方处理可以指定网点和中心，如果是责任中心处理节点那么只能查询中心
                if(StringUtil.isNotEmpty(taskDefKey) && taskDefKey.equals(CcConstants.DIAGRAMS_CS_CUST_SER_ORDER_TASK_DUTY_CENTER_DEAL)){
                    //责任中心处理
                    icsOrgVo.put(Constants.ORG_TYPE, CcConstants.ORG_TYPE_FINANCIAL_CENTERE);
                }else{
                    icsOrgVo.put(Constants.ORG_TYPE, currentUser.getOrgType());
                }
            }else{
                icsOrgVo.put(Constants.ORG_TYPE, currentUser.getOrgType());
            }

            //查询此组织（乾坤组织）下的人员信息
            List<IcsOrgVo> orgVos = omgOrgBiz.getOrgOfNotSelf(icsOrgVo);
            return orgVos;
        }
        return new ArrayList<IcsOrgVo>();
    }
    
    /**
     * 根据乾坤机构 机构基准编号 查询机构父机构信息  承包区-》网点、网点-》网点，分拨中心-》分拨中心
     * @param baseOrgCode
     * @return
     */
    @RequestMapping(value = "/getParentOrgInforByCmsBaseOrgCode.do")
    @ResponseBody
    public IcsOrgVo getParentOrgInforByCmsBaseOrgCode(String baseOrgCode){
    	try {
    		 IcsOrgVo icsOrgVo = omgOrgBiz.getOrgInforByCmsBaseOrgCode(baseOrgCode);
             if (icsOrgVo != null){
            	 if(icsOrgVo.getOrgType() == 40){
            		 //查询父级机构
                     IcsOrgVo icsOrgVo2 = omgOrgBiz.getOrgInforByCmsBaseOrgCode(icsOrgVo.getParentOrgCode());
                     return icsOrgVo2;
            	 }else{
            		 return icsOrgVo;
            	 }
             }
		} catch (Exception e) {
			logger.info("查询父级机构异常！",e);
		}
        return null;
    }
    
}
